package com.px.auditRecord.service.impl;

import java.util.List;

import cn.hutool.core.convert.Convert;
import com.px.auditRecord.domain.*;
import com.px.auditRecord.mapper.*;
import com.px.common.constant.Constants;
import com.px.common.constant.HttpStatus;
import com.px.common.core.redis.RedisCache;
import com.px.common.exception.ServiceException;
import com.px.common.utils.SecurityUtils;
import com.px.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.px.auditRecord.service.IAuditRecordUserService;

/**
 * 备案人员审核Service业务层处理
 * 
 * @author WRJ
 * @date 2024-08
 */
@Service
public class AuditRecordUserServiceImpl implements IAuditRecordUserService
{
    @Autowired
    private AuditRecordUserMapper auditRecordUserMapper;

    @Autowired
    private FlightUserAuditRecordUserMapper flightUserAuditRecordUserMapper;

    @Autowired
    private ForRecordUserMapper forRecordUserMapper;

    @Autowired
    private FlightUserForRecordUserMapper flightUserForRecordUserMapper;

    @Autowired
    private RedisCache redisCache;

    /**
     * 查询备案人员审核
     * 
     * @param userId 备案人员审核主键
     * @return 备案人员审核
     */
    @Override
    public AuditRecordUser selectAuditRecordUserByUserId(Integer userId)
    {
        return auditRecordUserMapper.selectAuditRecordUserByUserId(userId);
    }

    @Override
    public AuditRecordUser selectAuditRecordUserByIdcardAll(String idcard)
    {
        return auditRecordUserMapper.selectAuditRecordUserByIdcardAll(idcard);
    }


    /**
     * 查询备案人员审核列表
     * 
     * @param auditRecordUser 备案人员审核
     * @return 备案人员审核
     */
    @Override
    public List<AuditRecordUser> selectAuditRecordUserList(AuditRecordUser auditRecordUser)
    {
        return auditRecordUserMapper.selectAuditRecordUserList(auditRecordUser);
    }

    /**
     * 新增备案人员审核
     * 
     * @param auditRecordUser 备案人员审核
     * @return 结果
     */
    @Override
    public int insertAuditRecordUser(AuditRecordUser auditRecordUser)
    {
        //判断是否存在审核中，或者审核通过的数据，存在直接拒绝
        ForRecordUser fru = forRecordUserMapper.selectForRecordUserByIdcard(auditRecordUser.getIdcard());
        if(StringUtils.isNotNull(fru)){
            throw new ServiceException("该身份证号已存在，是否直接绑定？", HttpStatus.CREATED);
        }
        AuditRecordUser aru = auditRecordUserMapper.selectAuditRecordUserByIdcard(auditRecordUser.getIdcard());

        if(StringUtils.isNotNull(aru)){
            if(aru.getAuditState().equals("0"))
                throw new ServiceException("该身份证号正在审核中，请耐心等待", HttpStatus.WARN);
            if(aru.getAuditState().equals("1"))
                throw new ServiceException("该身份证号已审核通过，请刷新", HttpStatus.WARN);
        }
        //状态为0时，验证验证码是否正确
        if("0".equals(auditRecordUser.getAuditState())){
            //验证码为空
            if(StringUtils.isNull(auditRecordUser.getCode()))
                throw new ServiceException("验证码为空!");

            //验证码失效
            if(StringUtils.isNull(redisCache.getCacheObject(auditRecordUser.getPhonenumber()+ Constants.FOR_RECORD)))
                throw new ServiceException("验证码失效!");

            //验证码错误
            if(!auditRecordUser.getCode().equals(redisCache.getCacheObject(auditRecordUser.getPhonenumber()+Constants.FOR_RECORD)))
                throw new ServiceException("验证码错误!");

            auditRecordUser.setPhonenumberState("true");
        }
        auditRecordUserMapper.insertAuditRecordUser(auditRecordUser);


        //插入绑定关系
        FlightUserAuditRecordUser flightUserAuditRecordUser = new FlightUserAuditRecordUser();
        flightUserAuditRecordUser.setAuditRecordUserId(auditRecordUser.getId());
        flightUserAuditRecordUser.setUserId(SecurityUtils.getUserId().intValue());
        return flightUserAuditRecordUserMapper.insertFlightUserAuditRecordUser(flightUserAuditRecordUser);
    }

    /**
     * 修改备案人员审核
     * 
     * @param auditRecordUser 备案人员审核
     * @return 结果
     */
    @Override
    public int updateAuditRecordUser(AuditRecordUser auditRecordUser)
    {
        //审核通过后转存备案通过表
        if("1".equals(auditRecordUser.getAuditState())){
            AuditRecordUser aru = auditRecordUserMapper.selectAuditRecordUserById(auditRecordUser.getId());
            ForRecordUser forRecordUser = Convert.convert(ForRecordUser.class, aru);
            forRecordUser.setAuditRecordUserId(auditRecordUser.getId());
            forRecordUserMapper.insertForRecordUser(forRecordUser);

            FlightUserAuditRecordUser f = flightUserAuditRecordUserMapper.selectFlightUserAuditRecordUserByAruId(auditRecordUser.getId());
            //插入绑定关系
            FlightUserForRecordUser flightUserForRecordUser = new FlightUserForRecordUser();
            flightUserForRecordUser.setForRecordUserId(forRecordUser.getId());
            flightUserForRecordUser.setUserId(f.getUserId());
            flightUserForRecordUserMapper.insertFlightUserForRecordUser(flightUserForRecordUser);
        }

        return auditRecordUserMapper.updateAuditRecordUser(auditRecordUser);
    }

    /**
     * 批量删除备案人员审核
     * 
     * @param ids 需要删除的备案人员审核主键
     * @return 结果
     */
    @Override
    public int deleteAuditRecordUserByIds(Integer[] ids)
    {
        return auditRecordUserMapper.deleteAuditRecordUserByIds(ids);
    }

    /**
     * 删除备案人员审核信息
     * 
     * @param id 备案人员审核主键
     * @return 结果
     */
    @Override
    public int deleteAuditRecordUserById(Integer id)
    {
        return auditRecordUserMapper.deleteAuditRecordUserById(id);
    }

    @Override
    public List<AuditRecordUser> selectAuditRecordUserFlightList(AuditRecordUser auditRecordUser) {
        return auditRecordUserMapper.selectAuditRecordUserFlightList(auditRecordUser);
    }

    @Override
    public List<AuditRecordUser> selectAuditRecordUserListByIdCard(String idCard) {
        return null;
    }
}
